/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package actions;

import Connexion.ConnexionAdmin;
import Connexion.ConnexionCustomer;
import actions.facade.FacadeAction;
import com.opensymphony.xwork2.ActionContext;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
import miage.beans.ClientPresentation;
import miage.beans.FacturePresentation;
import miage.beans.ProduitPresentation;
import miage.sessions.ecom.remote.EcomAdminRemote;
import miage.sessions.ecom.remote.EcomCustomerRemote;

/**
 *
 * @author Pepito
 */
public class AchatPanierAction extends FacadeAction{
        
    private Map session = ActionContext.getContext().getSession();
    private static EcomCustomerRemote rechercher;
    private static EcomAdminRemote admin;
    private String panierInscription, login, password;
    private ClientPresentation client;
    private List<ProduitPresentation> produitDuPanier = new ArrayList<ProduitPresentation>();
    private List<ProduitPresentation> produitQuantiteInsuffisante = new ArrayList<ProduitPresentation>();
    private List<Double> lesPrix= new ArrayList<Double>();
    private List<Integer> lesQuantites = new ArrayList<Integer>();
    private List<String>lesReferencesProduit = new ArrayList<String>();
    List<String> lesProduits = new ArrayList<String>();
    
    public List<ProduitPresentation> getProduitQuantiteInsuffisante() {
        return produitQuantiteInsuffisante;
    }

    public List<Double> getLesPrix() {
        return lesPrix;
    }

    public void setLesPrix(List<Double> lesPrix) {
        this.lesPrix = lesPrix;
    }

    public List<Integer> getLesQuantites() {
        return lesQuantites;
    }

    public void setLesQuantites(List<Integer> lesQuantites) {
        this.lesQuantites = lesQuantites;
    }

    public List<String> getLesReferencesProduit() {
        return lesReferencesProduit;
    }

    public void setLesReferencesProduit(List<String> lesReferencesProduit) {
        this.lesReferencesProduit = lesReferencesProduit;
    }

    public List<String> getLesProduits() {
        return lesProduits;
    }

    public void setLesProduits(List<String> lesProduits) {
        this.lesProduits = lesProduits;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setProduitQuantiteInsuffisante(List<ProduitPresentation> produitQuantiteInsuffisante) {
        this.produitQuantiteInsuffisante = produitQuantiteInsuffisante;
    }
    
    
    public List<ProduitPresentation> getProduitDuPanier() {
        return produitDuPanier;
    }
    
    public void setProduitDuPanier(List<ProduitPresentation> produitDuPanier) {
        this.produitDuPanier = produitDuPanier;
    }
    
    public String getPanierInscription() {
        return panierInscription;
    }

    public void setPanierInscription(String panierInscription) {
        this.panierInscription = panierInscription;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public ClientPresentation getClient() {
        return client;
    }

    public void setClient(ClientPresentation client) {
        this.client = client;
    }
    
    public String goInscription(){
        rechercher = ConnexionCustomer.connectionServerBean();
        this.nbProduit = rechercher.nombreProduitInCart();
        System.out.println("nb produit = "+nbProduit);
        return "success";
    }
    public String infoPourAchat() {
        rechercher = ConnexionCustomer.connectionServerBean();
        setLogin(String.valueOf(session.get("login")));
        setPassword(String.valueOf(session.get("password")));         
        System.out.println("login + password = "+login +" "+password);
        try {
            client = rechercher.getAuthentification(login, password);
        } catch (FinderException ex) {
            Logger.getLogger(AchatPanierAction.class.getName()).log(Level.SEVERE, null, ex);
        } catch (RemoteException ex) {
            Logger.getLogger(AchatPanierAction.class.getName()).log(Level.SEVERE, null, ex);
        }
        this.nbProduit = rechercher.nombreProduitInCart();
        return "success";
    }
    
    public String finalisation() throws CreateException, RemoteException, FinderException{
        rechercher = ConnexionCustomer.connectionServerBean();
        produitDuPanier = rechercher.getProduitDuPanier(); //récupération des produits du panier
        System.out.println("finalisation entree");
        login = String.valueOf(session.get("login"));
        //si produit du panier
        if(checkVerificationProduitDuPanier()){
            //alors l'insérer dans une facture puis dans une commande.
            Calendar c = Calendar.getInstance();
            Date d = new Date();
            System.out.println(d.toString());
            Date a = new java.sql.Date(d.getTime());

            lesProduits.clear();
             lesPrix.clear();
             lesQuantites.clear();
            for(int i=0; i<produitDuPanier.size();i++){
                
                lesProduits.add(produitDuPanier.get(i).getNom_produit());
               
                lesPrix.add(produitDuPanier.get(i).getPrix_produit());
                
                lesQuantites.add(produitDuPanier.get(i).getQuantite());
            }
            
            
            FacturePresentation fp = new FacturePresentation(login, a, lesProduits, lesPrix, lesQuantites);
            System.out.println("");
            rechercher.addFacture(fp);
            System.out.println("facture ajoutée");
  
            //vide le panier
            rechercher.clearProduitDuPanier();
            return "success";
        }
        else{
            return "input";
        }  
    }
    public boolean checkVerificationProduitDuPanier() throws FinderException, RemoteException{
        int i=0;
        List<ProduitPresentation> pp = new ArrayList<ProduitPresentation>();
        while(i<produitDuPanier.size()){
            pp.add(rechercher.getProduitByReferenceProduit(produitDuPanier.get(i).getReference_produit()));
            lesPrix.add(produitDuPanier.get(i).getPrix_produit());
            lesQuantites.add(produitDuPanier.get(i).getQuantite());
            lesReferencesProduit.add(produitDuPanier.get(i).getReference_produit());
            i++;
        }
        i=0;
        boolean quantitesuffisante = true;
        while(i<produitDuPanier.size()){
            if(pp.get(i).getQuantite()>= produitDuPanier.get(i).getQuantite()){
                i++;
            }else{
                quantitesuffisante=false;
                produitQuantiteInsuffisante.add(produitDuPanier.get(i));
                System.out.println("il n'y a plus assez de produit ");
            }            
        }
        return quantitesuffisante;
    }
}
